package model

import (
	"math"
	"time"

	"go.mongodb.org/mongo-driver/bson/primitive"
)

// mongoDB

// 好友聊天信息 集合
type Chat struct {
	// 集合id
	Id primitive.ObjectID `bson:"_id,omitempty" json:"id"`
	// 集合所属的用户
	Users []int `bson:"users" json:"users"`
	// 聊天的内容
	Chat []ChatMsg `bson:"chat,truncate" json:"chat"`
}

// 单条聊天信息
type ChatMsg struct {
	// 信息发送的时间
	Date_time time.Time `bson:"date_time" json:"date_time"`
	// 信息的内容
	Msg string `bson:"msg" json:"msg"`
	// 发送信息的用户id
	Id int `bson:"id" json:"id"`
	// 是否已读   true 已读  false 未读
	Read bool `bson:"read" json:"read"`
}

// 聊天信息进行分页
func (c *Chat) PageHandle(page, pageSize int) (pageTotal int) {
	// 计算总信息量
	size := len(c.Chat)
	pageTotal = int(math.Ceil(float64(size) / float64(pageSize)))

	// 如果 size 总数 为0则直接退出
	if size <= 0 {
		return
	}

	start := size - page*pageSize
	end := start + pageSize

	// 防止数组越界
	if start < 0 {
		start = 0
	}
	if end > size || end <= 0 {
		end = size - 1
	}

	c.Chat = c.Chat[start:end]
	// 反转
	// reverse(c.Chat)

	// 如果页数大于最大页数 返回空数组
	if page > pageTotal {
		c.Chat = []ChatMsg{}
	}

	return
}

// 数组反转
func reverse(s []ChatMsg) {

	for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {

		s[i], s[j] = s[j], s[i]

	}

}
